# 1. Scrivere una funzione che presi due numeri verifichi se il primo numero è divisibile per il secondo (ovvero, il resto della divisione è 0).

def esercizio1(x, y):
    return x % y == 0
    #equivale a  # if x % y == 0: return True else: return False

#Proviamo esercizio1
print(esercizio1(10,5))
print(esercizio1(9,7))

#2. Scrivere una funzione che richiami la funzione al punto 1. La funzione deve prima verificare che i due numeri siano non-negativi e che il divisore non sia zero.
def esercizio2(x,y):
    if x < 0 or y <= 0:
        return None
    return esercizio1(x,y)

#Proviamo esercizio2
print(esercizio2(10,5))
print(esercizio2(-1,5))
print(esercizio2(3,-7))
print(esercizio2(10, 0))

#3. Scrivere una funzione che richiami la funzione al punto 2. per verificare che il primo numero sia pari (basta dare come secondo numero il numero 2)
def esercizio3(x):
    return esercizio2(x,2)

#Proviamo esercizio3
print(esercizio3(10))
print(esercizio3(3))

#4. Scrivere una funzione che presi due numeri x,y e un booleano b (True o False) calcoli x**y (x elevato a y) se b è uguale a True, y**x (y elevato a x) altrimenti.

def esercizio4(x,y,b):
    if b:
      return x**y
    return y**x

#Proviamo esercizio4

print(esercizio4(2,3,True))
print(esercizio4(2,3,False))

#5. Scrivere una funzione che richiami la funzione al punto 4, verificando che x e y siano numeri positivi,e che b sia di tipo booleano (bool).

def esercizio5(x,y,b):
    if type(x) != int or type(y) != int or type(b) != bool or x < 0 or y < 0:
        return None
    return esercizio4(x,y,b)

#Proviamo esercizio5
print(esercizio5("s",2, True))
print(esercizio5(2,2,"false"))
print(esercizio5(2,2,True))

#6. Scrivere una funzione che preso un numero x e sfruttando la funzione al punto 5, calcoli il quadrato x.

def esercizio6(x):
    return esercizio5(x,2,True)

#Proviamo esercizio 6
print(esercizio6(3))